package com.chuangke.dev.service;

import java.util.List;
import java.util.Map;

import org.springframework.web.multipart.MultipartFile;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.chuangke.common.db.page.CkPageQuery;
import com.chuangke.common.http.HttpResult;
import com.chuangke.dev.bean.ImportDataRequest;
import com.chuangke.dev.model.SysModelColumn;
import com.chuangke.dev.model.SysModelTable;

/**
 * 业务 服务层
 * 
 * @author chuangke
 */
public interface SysModelTableService extends IService<SysModelTable> {
	
	List<SysModelTable> listModels(SysModelTable genTable);
	
	SysModelTable loadModelById(String tableId) ;
	
	SysModelTable loadModelByName(String tableName) ;
	
	void updateModel(SysModelTable genTable) ;
	
	void deleteModelByIds(List<String> tableIds);

	/**
	 * 导入表结构
	 * 
	 * @param tableList 导入表列表
	 */
    void importModel(List<SysModelTable> tableList);

	/**
	 * 预览代码
	 * 
	 * @param tableId 表编号
	 * @return 预览数据列表
	 */
    Map<String, String> previewCode(String tableId);

	/**
	 * 生成代码
	 * 
	 * @return 数据
	 */
    Map<String,byte[]> generatorCode(String tableId);

	/**
	 * 批量生成代码
	 * 
	 * @return 数据
	 */
    Map<String,byte[]> generatorCode(String[] tableIds);

	/**
	 * 修改保存参数校验
	 * 
	 * @param genTable 业务信息
	 */
    void validateEdit(SysModelTable genTable);
	
	/**
	 * 通过information_schema获取table元数据
	 * @param genTable
	 * @return
	 */
    List<SysModelTable> selectTablesFromSchema(SysModelTable genTable);
	
	/**
	 * 通过information_schema获取table元数据
	 * @return
	 */
    List<SysModelTable> selectTablesFromSchemaByNames(String[] tableNames);

	void createTable(List<SysModelColumn> sysModelColumnList);

	HttpResult importTableData(ImportDataRequest importDataRequest, MultipartFile file);

	List<SysModelTable> selectAllTablesFromSchema(SysModelTable genTable);

	IPage<Map<String,Object>> findImportData(CkPageQuery pageRequest);

	void createModelTable(SysModelTable sysModelTable);

}
